package ar.edu.utn.frba.dds.tp.code.adapter;

import org.joda.time.LocalTime;
import org.joda.time.format.DateTimeFormat;

import ar.edu.utn.frba.dds.tp.code.Asientos.AsientoDeVuelo;
import ar.edu.utn.frba.dds.tp.code.Asientos.ClaseAsiento;
import ar.edu.utn.frba.dds.tp.code.Asientos.EstadoAsiento;
import ar.edu.utn.frba.dds.tp.code.Asientos.UbicacionAsiento;
import ar.edu.utn.frba.dds.tp.code.dateParser.FormatoSimple;
import ar.edu.utn.frba.dds.tp.code.dateParser.ParserFecha;
import ar.edu.utn.frba.dds.tp.code.vuelos.Vuelo;

import com.oceanic.AsientoDTO;

public class OceanicConversor extends AbstractConversor{

	public AsientoDeVuelo convertirAsiento(AsientoDTO asientoDTO) {
		Vuelo vuelo = new Vuelo(asientoDTO.getCodigoDeVuelo(), 
								this.fromLugarOceanicToLugar(asientoDTO.getOrigen()), 
								this.fromLugarOceanicToLugar(asientoDTO.getDestino()), 
								ParserFecha.Parsear(asientoDTO.getFechaDeSalida(), FormatoSimple.LATINOAMERICANO), 
								ParserFecha.Parsear(asientoDTO.getFechaDeLlegada(),FormatoSimple.LATINOAMERICANO), 
								LocalTime.parse(asientoDTO.getHoraDeSalida(), DateTimeFormat.forPattern("HH:mm")),
								LocalTime.parse(asientoDTO.getHoraDeLlegada(), DateTimeFormat.forPattern("HH:mm")));
		
		ClaseAsiento clase = this.generarClaseDeAsiento(asientoDTO.getClase());
		UbicacionAsiento ubicacion = this.generarUbicacionDeAsiento(asientoDTO.getUbicacion());
		EstadoAsiento estado = this.generarEstadoDeAsiento(asientoDTO);
		
		AsientoDeVuelo asiento = new AsientoDeVuelo(asientoDTO.getNumeroDeAsiento(),asientoDTO.getPrecio(), clase, ubicacion, estado);
		asiento.setVuelo(vuelo);
		return asiento;
	}

	private EstadoAsiento generarEstadoDeAsiento(AsientoDTO asientoDTO) {
		EstadoAsiento estado = null;
		
		if(asientoDTO.getReservado())
			estado = EstadoAsiento.RESERVADO;
		else
			estado = EstadoAsiento.DISPONIBLE;
		return estado;
	}
	
	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//+++ Conversión De Lugar ++++++++++++++++++++++++++++++++++++
	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

	public String fromLugarToLugarOceanic(String lugar) {
		String lugarOceanic = lugar;
		if (lugar.length()<3){
			lugarOceanic = lugar.concat("_");
		}
		if (lugar.equals("LA")){
			lugarOceanic = "SLA";
		}
		return lugarOceanic;
	}
	
	public String fromLugarOceanicToLugar(String lugarOceanic){
		String lugar = lugarOceanic;
		if (lugarOceanic.endsWith("_")){
			lugar = lugarOceanic.substring(0, 2);
		}
		if (lugarOceanic.equals("SLA")){
			lugar = "LA";
		}
		return lugar;
	}

}
